package com.micro.ai.template.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.micro.ai.template.entity.TemplateTag;
import com.micro.ai.template.mapper.TemplateTagMapper;
import com.micro.ai.template.service.TemplateTagService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 模板标签Service实现
 *
 * @author micro-ai
 * @since 0.0.1
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class TemplateTagServiceImpl extends ServiceImpl<TemplateTagMapper, TemplateTag>
        implements TemplateTagService {

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addTagsToTemplate(String templateId, List<String> tagNames) {
        log.info("为模板添加标签, templateId: {}, tags: {}", templateId, tagNames);

        for (String tagName : tagNames) {
            // 查找或创建标签
            LambdaQueryWrapper<TemplateTag> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(TemplateTag::getTagName, tagName);
            
            TemplateTag tag = this.getOne(wrapper);
            if (tag == null) {
                // 创建新标签
                tag = new TemplateTag();
                tag.setTagName(tagName);
                tag.setCreatedAt(LocalDateTime.now());
                tag.setUseCount(0);
                this.save(tag);
            }
            
            // TODO: 在template_tag_relations表中创建关联记录
            // 这需要一个单独的关联表Service
        }

        log.info("标签添加成功");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void removeTagsFromTemplate(String templateId, List<String> tagNames) {
        log.info("从模板移除标签, templateId: {}, tags: {}", templateId, tagNames);

        // TODO: 在template_tag_relations表中删除关联记录
        // 这需要一个单独的关联表Service
        
        log.info("标签移除成功");
    }

    @Override
    public List<TemplateTag> getTemplateTags(String templateId) {
        // TODO: 通过template_tag_relations表查询模板的标签
        // 目前返回空列表
        return java.util.Collections.emptyList();
    }

    @Override
    public List<TemplateTag> getAllTags() {
        LambdaQueryWrapper<TemplateTag> wrapper = new LambdaQueryWrapper<>();
        wrapper.groupBy(TemplateTag::getTagName)
                .orderByDesc(TemplateTag::getCreatedAt);
        
        return this.list(wrapper);
    }

    @Override
    public List<TemplateTag> getPopularTags(int limit) {
        // 通过标签使用频率获取热门标签
        LambdaQueryWrapper<TemplateTag> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByDesc(TemplateTag::getUseCount)
                .last("LIMIT " + limit);
        return this.list(wrapper);
    }

    @Override
    public List<String> getTemplateIdsByTag(String tagName) {
        // TODO: 通过template_tag_relations表查询使用该标签的模板
        // 目前返回空列表
        return java.util.Collections.emptyList();
    }
}

